/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dominosaude.dominoesControler;

import java.rmi.AlreadyBoundException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;

/**
 *
 * @author Rafael
 */
public class ClientJogo implements InterfaceRemotaDomino{

    public InterfaceRemotaDomino stub;
    public InterfaceRemotaDomino stubClient;
    private Registry registro;
    private DominoesControl controle;

/*   public static void main(){
	   new ClientJogo ();
   }
*/
   public ClientJogo(DominoesControl c) throws AlreadyBoundException{

try{
            // Perguntar ao usuario onde ele deseja se conectar
            String SERVER = "localhost";
            controle = c;
            registro = LocateRegistry.getRegistry(SERVER, 1099);
            stub = (InterfaceRemotaDomino) registro.lookup ("DominoSaude");
            // Juntar-se ao jogo ja criado.

            stubClient = (dominosaude.dominoesControler.InterfaceRemotaDomino) UnicastRemoteObject.exportObject (this, 0);
            registro = LocateRegistry.createRegistry(1098);
            registro.bind("DominoClient", this);

	    System.out.println("FUNCIONOU , JUNTANDO SE AO JOGO");

        }catch(RemoteException RException){
            System.out.println("Registro nao funcionou, por nao estabelecer conexao. " + RException.getMessage());
        }catch(NotBoundException NBException){
            System.out.println("Registro nao funcionou, erro de vinculacao. " + NBException.getMessage());
        }

   }

    public int jogar(ArrayList jogador1, ArrayList jogador2, ArrayList mesa, int jogador) throws RemoteException {
        if (controle.MPisRunningAGame() == false)
        {
            controle.MPRecriaEDistribuiPecasClient(jogador1, jogador2, mesa);
            stub.jogar(jogador1, jogador2, mesa, 0);
            System.out.println("Executando jogar client false");
        }
        else
        {
            controle.MPRealizaJogadaRemota(jogador1, jogador2, mesa);
            controle.setGameStatus(DominoesControl.Status.JOGADOR2_VEZ);
            System.out.println("Executando jogar true");
        }
        return 0;
    }

    public void ClientConnected() throws RemoteException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}